use std::{
    collections::HashSet,
    sync::{Arc, Mutex},
};
use tokio::sync::broadcast;

pub struct AppState {
    // 我们需要唯一的用户名。这将跟踪哪些用户名已被占用
    pub user_set: Mutex<HashSet<String>>,
    // 用于向所有连接的客户端发送消息的通道
    pub tx: broadcast::Sender<String>,
}

pub fn state() -> Arc<AppState> {
    let user_set = Mutex::new(HashSet::new());
    let (tx, _rx) = broadcast::channel(100);
    Arc::new(AppState { user_set, tx })
}